package com.hsgene.order.domain.v1;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.hsgene.common.util.date.TimeJsonDeserializer;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 基因检测订单主表
 *
 * @author wangbing
 * @version 1.0, 2018/9/18
 */
public class GeneticTestingOrder {

    /**
     * 逻辑主键ID
     */
    private String id;

    /**
     * 医生ID
     */
    private String doctorId;

    /**
     * 医生电话
     */
    private String doctorPhone;

    /**
     * 医生名称
     */
    private String doctorName;

    /**
     * 基因检测订单编号、系统按照一定规则生成
     */
    private String orderNo;

    /**
     * 检测目的
     */
    private String testingPurpose;

    /**
     * 检测时间
     */
    @JsonDeserialize(using = TimeJsonDeserializer.class)
    private Date testingDateTime;

    /**
     * 患者姓名
     */
    private String patientName;

    /**
     * 患者年龄
     */
    private Integer patientAge;

    /**
     * 患者性别
     */
    private Integer patientSex;

    /**
     * 患者电话
     */
    private String patientPhone;

    /**
     * 患者家属名称
     */
    private String patientFamilyName;

    /**
     * 患者家属电话
     */
    private String patientFamilyPhone;

    /**
     * 总费用
     */
    private BigDecimal totalCharges;

    /**
     * 总佣金、积分
     */
    private Integer totalCommission;

    /**
     * 订单状态(‘init’, ‘canceled’, ‘difu_confirmed’, ‘difu_completed’, ‘pre_audit_pass’, ‘pre_audit_fail’, ‘audit_pass’, ‘testing’, ‘reported’, ‘order_auditing’, ‘order_audit_fail’, ‘done’, ‘exception’, ‘stop’, ‘audit_fail’, ‘receive_payment_confirmed’, ‘bill_confirmed’, ‘mail’, ‘apply_bill’)
     * 订单状态(1：新订单，2：地服确认，3：预审核通过，4：预审核不通过，5：地服收款完成，6：地服收款确认完成，7：样本待确认，8：样本已确认，9：待上传报告，10：回款确认，11：报告已上传，12：申请开票，13：开票确认，14：待签收15：完成，98：取消，99：暂停)
     */
    private Integer status;

    /**
     * 订单取消原因
     */
    private String cancelReason;

    /**
     * 订单取消类型
     */
    private String cancelType;

    /**
     * 订单费用状态(init, charged, confirmed)
     */
    private String chargeStatus;

    /**
     * 创建时间
     */
    @JsonDeserialize(using = TimeJsonDeserializer.class)
    private Date createDateTime;

    /**
     * 更新时间
     */
    @JsonDeserialize(using = TimeJsonDeserializer.class)
    private Date updateDateTime;

    /**
     * 预警报告
     */
    private String description;

    /**
     * 修改积分原因
     */
    private String modifyScoreReason;

    /**
     * 发货时间（检测报告等物品发送给订单用户的时间）
     */
    private Date deliveryDateTime;

    /**
     *
     */
    @JsonDeserialize(using = TimeJsonDeserializer.class)
    private Date receiveDateTime;

    /**
     * 报告名称
     */
    private String reportName;

    /**
     * 退款报告
     */
    private String refundReportName;

    /**
     * 退款状态
     */
    private String refundStatus;

    /**
     * 退款金额
     */
    private BigDecimal refundAmount;

    /**
     * 终止原因
     */
    private String stopReason;

    /**
     * 修改价格备注
     */
    private String modifyPriceRemarks;

    /**
     * 修改积分报告
     */
    private String modifyScoreReport;

    /**
     * 发票抬头
     */
    private String invoiceTitle;

    /**
     * 发票的图片地址
     */
    private String invoiceImagesUrl;

    /**
     * 采样图片
     */
    private String collectSampleImagesUrl;

    /**
     * 检测图片地址
     */
    private String testingImagesUrl;

    /**
     * 快递图片地址
     */
    private String courierImagesUrl;

    /**
     * 发送信息的次数（保留兼容以前的业务）
     */
    private Integer number;

    /**
     * 费用
     */
    private BigDecimal fee;

    /**
     * 订单来源（‘1-运营后台’, 2-‘花生仁’，‘3-金琉璃’，‘4-因子网小程序’，‘5-因子网PC’，‘6-因子网APP’）
     */
    private Integer orderOrigin;

    /**
     * 业务数据逻辑删除 0-代表未删除   1-代表删除
     */
    private Integer deleteFlag;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 冗余改订单的优惠价格
     */
    private BigDecimal discountPrice;

    /**
     * 关联用户优惠卷的ID
     */
    private String userDiscountId;

    /**
     * 订单创建人id
     */
    private String creatorId;

    /**
     * 异常发生之前的订单状态
     */
    private Integer beforeExceptionStatus;

    /**
     * 订单超期检测标志（0：未超期；1：已超期）（只有报告待上传状态才会出现超期）
     */
    private Integer postponeFlag;

    /**
     * 超期检测备注
     */
    private String postponeRemarks;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getDoctorId() {
        return doctorId;
    }

    public void setDoctorId(String doctorId) {
        this.doctorId = doctorId;
    }

    public String getDoctorPhone() {
        return doctorPhone;
    }

    public void setDoctorPhone(String doctorPhone) {
        this.doctorPhone = doctorPhone;
    }

    public String getDoctorName() {
        return doctorName;
    }

    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public String getTestingPurpose() {
        return testingPurpose;
    }

    public void setTestingPurpose(String testingPurpose) {
        this.testingPurpose = testingPurpose;
    }

    public Date getTestingDateTime() {
        return testingDateTime;
    }

    public void setTestingDateTime(Date testingDateTime) {
        this.testingDateTime = testingDateTime;
    }

    public String getPatientName() {
        return patientName;
    }

    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }

    public Integer getPatientAge() {
        return patientAge;
    }

    public void setPatientAge(Integer patientAge) {
        this.patientAge = patientAge;
    }

    public Integer getPatientSex() {
        return patientSex;
    }

    public void setPatientSex(Integer patientSex) {
        this.patientSex = patientSex;
    }

    public String getPatientPhone() {
        return patientPhone;
    }

    public void setPatientPhone(String patientPhone) {
        this.patientPhone = patientPhone;
    }

    public String getPatientFamilyName() {
        return patientFamilyName;
    }

    public void setPatientFamilyName(String patientFamilyName) {
        this.patientFamilyName = patientFamilyName;
    }

    public String getPatientFamilyPhone() {
        return patientFamilyPhone;
    }

    public void setPatientFamilyPhone(String patientFamilyPhone) {
        this.patientFamilyPhone = patientFamilyPhone;
    }

    public BigDecimal getTotalCharges() {
        return totalCharges;
    }

    public void setTotalCharges(BigDecimal totalCharges) {
        this.totalCharges = totalCharges;
    }

    public Integer getTotalCommission() {
        return totalCommission;
    }

    public void setTotalCommission(Integer totalCommission) {
        this.totalCommission = totalCommission;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getCancelReason() {
        return cancelReason;
    }

    public void setCancelReason(String cancelReason) {
        this.cancelReason = cancelReason;
    }

    public String getCancelType() {
        return cancelType;
    }

    public void setCancelType(String cancelType) {
        this.cancelType = cancelType;
    }

    public String getChargeStatus() {
        return chargeStatus;
    }

    public void setChargeStatus(String chargeStatus) {
        this.chargeStatus = chargeStatus;
    }

    public Date getCreateDateTime() {
        return createDateTime;
    }

    public void setCreateDateTime(Date createDateTime) {
        this.createDateTime = createDateTime;
    }

    public Date getUpdateDateTime() {
        return updateDateTime;
    }

    public void setUpdateDateTime(Date updateDateTime) {
        this.updateDateTime = updateDateTime;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getModifyScoreReason() {
        return modifyScoreReason;
    }

    public void setModifyScoreReason(String modifyScoreReason) {
        this.modifyScoreReason = modifyScoreReason;
    }

    public Date getDeliveryDateTime() {
        return deliveryDateTime;
    }

    public void setDeliveryDateTime(Date deliveryDateTime) {
        this.deliveryDateTime = deliveryDateTime;
    }

    public Date getReceiveDateTime() {
        return receiveDateTime;
    }

    public void setReceiveDateTime(Date receiveDateTime) {
        this.receiveDateTime = receiveDateTime;
    }

    public String getReportName() {
        return reportName;
    }

    public void setReportName(String reportName) {
        this.reportName = reportName;
    }

    public String getRefundReportName() {
        return refundReportName;
    }

    public void setRefundReportName(String refundReportName) {
        this.refundReportName = refundReportName;
    }

    public String getRefundStatus() {
        return refundStatus;
    }

    public void setRefundStatus(String refundStatus) {
        this.refundStatus = refundStatus;
    }

    public BigDecimal getRefundAmount() {
        return refundAmount;
    }

    public void setRefundAmount(BigDecimal refundAmount) {
        this.refundAmount = refundAmount;
    }

    public String getStopReason() {
        return stopReason;
    }

    public void setStopReason(String stopReason) {
        this.stopReason = stopReason;
    }

    public String getModifyPriceRemarks() {
        return modifyPriceRemarks;
    }

    public void setModifyPriceRemarks(String modifyPriceRemarks) {
        this.modifyPriceRemarks = modifyPriceRemarks;
    }

    public String getModifyScoreReport() {
        return modifyScoreReport;
    }

    public void setModifyScoreReport(String modifyScoreReport) {
        this.modifyScoreReport = modifyScoreReport;
    }

    public String getInvoiceTitle() {
        return invoiceTitle;
    }

    public void setInvoiceTitle(String invoiceTitle) {
        this.invoiceTitle = invoiceTitle;
    }

    public String getInvoiceImagesUrl() {
        return invoiceImagesUrl;
    }

    public void setInvoiceImagesUrl(String invoiceImagesUrl) {
        this.invoiceImagesUrl = invoiceImagesUrl;
    }

    public String getCollectSampleImagesUrl() {
        return collectSampleImagesUrl;
    }

    public void setCollectSampleImagesUrl(String collectSampleImagesUrl) {
        this.collectSampleImagesUrl = collectSampleImagesUrl;
    }

    public String getTestingImagesUrl() {
        return testingImagesUrl;
    }

    public void setTestingImagesUrl(String testingImagesUrl) {
        this.testingImagesUrl = testingImagesUrl;
    }

    public String getCourierImagesUrl() {
        return courierImagesUrl;
    }

    public void setCourierImagesUrl(String courierImagesUrl) {
        this.courierImagesUrl = courierImagesUrl;
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    public BigDecimal getFee() {
        return fee;
    }

    public void setFee(BigDecimal fee) {
        this.fee = fee;
    }

    public Integer getOrderOrigin() {
        return orderOrigin;
    }

    public void setOrderOrigin(Integer orderOrigin) {
        this.orderOrigin = orderOrigin;
    }

    public Integer getDeleteFlag() {
        return deleteFlag;
    }

    public void setDeleteFlag(Integer deleteFlag) {
        this.deleteFlag = deleteFlag;
    }

    public String getRemarks() {
        return remarks;
    }

    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }

    public BigDecimal getDiscountPrice() {
        return discountPrice;
    }

    public void setDiscountPrice(BigDecimal discountPrice) {
        this.discountPrice = discountPrice;
    }

    public String getUserDiscountId() {

        return userDiscountId;
    }

    public void setUserDiscountId(String userDiscountId) {
        this.userDiscountId = userDiscountId;
    }

    public String getCreatorId() {
        return creatorId;
    }

    public void setCreatorId(String creatorId) {
        this.creatorId = creatorId;
    }

    public Integer getBeforeExceptionStatus() {
        return beforeExceptionStatus;
    }

    public void setBeforeExceptionStatus(Integer beforeExceptionStatus) {
        this.beforeExceptionStatus = beforeExceptionStatus;
    }

    public Integer getPostponeFlag() {
        return postponeFlag;
    }

    public void setPostponeFlag(Integer postponeFlag) {
        this.postponeFlag = postponeFlag;
    }

    public String getPostponeRemarks() {
        return postponeRemarks;
    }

    public void setPostponeRemarks(String postponeRemarks) {
        this.postponeRemarks = postponeRemarks;
    }
}
